﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CANO.Data.DAOs
{
	public class EspecialidadDAO
	{
		public int EspecialidadID { get; set; }
		public string Especialidad { get; set; }

		public static List<EspecialidadDAO> getAll() 
		{
			List<EspecialidadDAO> listEspecialidad = new List<EspecialidadDAO>();

			using (dcCanoDataContext context = new dcCanoDataContext())
			{

				var especialidadCollection =
					from e in context.TipoEspecialidads
					select e;

				foreach (var item in especialidadCollection)
				{
					EspecialidadDAO especialidad = new EspecialidadDAO();
					especialidad.EspecialidadID = item.EspecialidadID;
					especialidad.Especialidad = item.Especialidad;
					listEspecialidad.Add(especialidad);
				}
				return listEspecialidad;
			}
		}

        public static EspecialidadDAO GetById(int EspecialidadId)
        {
            using (dcCanoDataContext context = new dcCanoDataContext())
            {

                var especialidad = (
                    from e in context.TipoEspecialidads
                    where e.EspecialidadID == EspecialidadId
                    select e).SingleOrDefault();


                EspecialidadDAO retVal = new EspecialidadDAO();
                retVal.EspecialidadID = especialidad.EspecialidadID;
                retVal.Especialidad = especialidad.Especialidad;

                return retVal;

            }
        }

        public static List<EspecialidadDAO> GetEspecialidadByName(string Especialidad)
        {
            List<EspecialidadDAO> listEspecialidad = new List<EspecialidadDAO>();

            using (dcCanoDataContext context = new dcCanoDataContext())
            {

                var especialidadCollection =
                    from e in context.TipoEspecialidads
                    where e.Especialidad == Especialidad
                    select e;

                foreach (var item in especialidadCollection)
                {
                    EspecialidadDAO especialidad = new EspecialidadDAO();
                    especialidad.EspecialidadID = item.EspecialidadID;
                    especialidad.Especialidad = item.Especialidad;
                    listEspecialidad.Add(especialidad);
                }
                return listEspecialidad;
            }
        }

		public static void create(string pEspecialidad)
		{
			using (dcCanoDataContext context = new dcCanoDataContext())
			{
				TipoEspecialidad newEspecialidad = new TipoEspecialidad();
				newEspecialidad.Especialidad = pEspecialidad;
				newEspecialidad.EspecialidadID = getId();

				context.TipoEspecialidads.InsertOnSubmit(newEspecialidad);
				context.SubmitChanges();
			}
		}

		public static int createNew(string pEspecialidad)
		{
			using (dcCanoDataContext context = new dcCanoDataContext())
			{
				TipoEspecialidad newEspecialidad = new TipoEspecialidad();
				newEspecialidad.Especialidad = pEspecialidad;
				newEspecialidad.EspecialidadID = getId();

				context.TipoEspecialidads.InsertOnSubmit(newEspecialidad);
				context.SubmitChanges();
				return newEspecialidad.EspecialidadID;
			}
		}

		private static int getId()
		{
			using (dcCanoDataContext context = new dcCanoDataContext())
			{
				var tipoEspecialidadColl =
					from tt in context.TipoEspecialidads
					select tt.EspecialidadID;

				return tipoEspecialidadColl.Max() + 1;
			}
		}

		public static int? GetIdByName(string especialidadToValidate)
		{
			using (dcCanoDataContext context = new dcCanoDataContext())
			{
				var especialidadColl =
					(from e in context.TipoEspecialidads
					 where e.Especialidad == especialidadToValidate
					 select e);

				return especialidadColl.Single().EspecialidadID;
			};
		}

        public static void Update(EspecialidadDAO eUpdate)
        {
            using (dcCanoDataContext context = new dcCanoDataContext())
            {
                var tt =
                    (from t in context.TipoEspecialidads
                     where t.EspecialidadID == eUpdate.EspecialidadID
                     select t).Single();

                tt.Especialidad = tt.Especialidad;

                context.SubmitChanges();
            }
        }

        public static int Delete(int especialidadId)
        {
            try
            {
                using (dcCanoDataContext context = new dcCanoDataContext())
                {
                    var es =
                        (from e in context.TipoEspecialidads
                         where e.EspecialidadID == especialidadId
                         select e).Single();

                    //tt.Status = 1; //Delete
                    context.TipoEspecialidads.DeleteOnSubmit(es);
                    context.SubmitChanges();
                    return 1;
                }
            }
            catch (Exception)
            {
                return 0;
            }


        }

	}
}
